home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 6: Level 6
/
17 Bit - Level 6 (1998)(Epic Marketing)[!].iso
/
quartz
/
q0545.dms
/
q0545.adf
/
VFTest.c
< prev
Wrap
C/C++ Source or Header
|
1988-01-21
|
5KB
|
203 lines
/*---------------- TESTPROGRAMM FUER VEKTORFONTHANDLER -----------------*/
#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>
#include <libraries/dos.h>
#include <exec/ports.h>
#include <exec/memory.h>
/*---- Strukturdefinition der Message ----*/
struct VFontMess
{
struct Node *ln_Succ;
struct Node *ln_Pred;
UBYTE ln_Type;
BYTE ln_Pri;
char *ln_Name;
struct MsgPort *mn_ReplyPort;
UWORD mn_Length;
struct RastPort *rp;
struct VekFont *VFont;
long xs,ys;
long wi,hi,spc;
long Flags;
char *String;
long Len,DrawMode;
};
/*---- Strukturdefinition Vektorfont ----*/
struct VekFont
{
short EdX,EdY;
USHORT FKenn;
UBYTE LoChar,HiChar;
short VBase;
long Reserved[4];
};
/*---- Globale Variablen ----*/
struct MsgPort *ReplyPort=0L,*MPort=0L;
struct IntuitionBase *IntuitionBase=0L;
struct GfxBase *GfxBase=0L;
char OutString[]="Beispieltext";
char VFName[]="df0:VektorFonts/Topaz.vek";
struct VekFont *VBuff=0L;
int VFLen=0L;
main()
{
struct Window *wn=0L;
struct IntuiMessage *imes;
ULONG flags=ACTIVATE|WINDOWCLOSE,datei=0L;
ULONG iflags=CLOSEWINDOW|MOUSEBUTTONS;
USHORT class,code;
if(OpenLibs() > 0) goto abbruch;
if(!(wn=OpenAWindow(0,0,640,200,"",flags,iflags))) goto abbruch;
if(!LoadVFont(VFName)) goto abbruch;
if(!InitPorts()) goto abbruch;
FOREVER
{
Wait(1<<wn->UserPort->mp_SigBit);
while(imes=GetMsg(wn->UserPort))
{
class=imes->Class;
code=imes->Code;
ReplyMsg(imes);
switch(class)
{
case CLOSEWINDOW:
goto abbruch;
case MOUSEBUTTONS:
if(imes->Code != SELECTDOWN) break;
SetAPen(wn->RPort,1);
WriteVekText(wn->RPort,VBuff,wn->MouseX,wn->MouseY,30,50,4,
OutString,JAM1);
}
}
}
abbruch:
if(wn) CloseWindow(wn);
if(VBuff) FreeMem(VBuff,VFLen);
CloseLibs();
}
/*--------------------------- Text schreiben ----------------------------*/
/* edp.fu */
WriteVekText(rp,font,xs,ys,wi,hi,spc,string,drmd)
struct RastPort *rp;
struct VekFont *font;
short xs,ys,wi,hi,spc;
char *string,drmd;
{
struct VFontMess VMess;
/* Massagestruktur initialisieren */
VMess.ln_Type=NT_MESSAGE;
VMess.mn_ReplyPort=ReplyPort;
VMess.mn_Length=0L;
VMess.rp=rp; /* Ausgaberastport */
VMess.VFont=font; /* Zeiger auf Vektorfont */
VMess.String=string; /* Zeichenkette */
VMess.xs=xs; /* X-Koordinate */
VMess.ys=ys; /* Y-Koordinate */
VMess.wi=wi; /* Fontbreite */
VMess.hi=hi; /* Fonthöhe */
VMess.spc=spc; /* Zeichenabstand */
VMess.Flags=0; /* Flaggenregister auf 0 */
VMess.Len=strlen(string); /* Anzahl Ausgabezeichen */
VMess.DrawMode=drmd; /* Zeichenmodus */
PutMsg(MPort,&VMess); /* Message abschicken */
WaitPort(ReplyPort); /* Auf Antwort warten */
GetMsg(ReplyPort); /* Antwort abholen */
return(VMess.Flags); /* Flagsvariable zurückgeben (Fehler ?) */
}
/*---------------------- Messageports initialisieren --------------------*/
/* edp.fu */
InitPorts()
{
MPort=FindPort("vekfport-t0"); /* Handlerport suchen */
if(MPort==0) return(0); /* Handler wurde nicht gefunden */
ReplyPort=FindPort("vekfport-t1"); /* Antwortport suchen */
ReplyPort->mp_SigTask=FindTask(0); /* Antwortport eigene Task zuweisen */
return(1);
}
/*---------------------------- Lade Vektorfont --------------------------*/
/* edp.fu */
LoadVFont(name)
char *name;
{
struct FileInfoBlock finfo;
struct FileLock *lockp=0L;
ULONG datei=0L;
/*---- Filelaenge feststellen -----*/
if(!(lockp=Lock(name,ACCESS_READ))) return(0);
if(!Examine(lockp,&finfo))
{
UnLock(lockp);
return(0);
}
VFLen=finfo.fib_Size;
UnLock(lockp);
/*---- Speicher besorgen und File laden -----*/
if(VFLen > 0)
{
if(!(VBuff=AllocMem(VFLen,MEMF_PUBLIC))) return(0);
datei=Open(name,MODE_OLDFILE);
Read(datei,VBuff,VFLen);
Close(datei);
}
return(VFLen);
}
/*-------------------------- Libraries öffnen --------------------------*/
/* edp.fu */
OpenLibs()
{
if(!(IntuitionBase=OpenLibrary("intuition.library",0L))) return(1);
if(!(GfxBase=OpenLibrary("graphics.library",0L))) return(2);
return(0);
}
/*-------------------------- Libraries schließen ------------------------*/
/* edp.fu */
CloseLibs()
{
if(IntuitionBase) CloseLibrary(IntuitionBase);
if(GfxBase) CloseLibrary(GfxBase);
}
/*------------------------------ Window öffnen ------------------------*/
OpenAWindow(x,y,w,h,name,flags,iflags)
short x,y,w,h;
char *name;
ULONG flags,iflags;
{
struct NewWindow NewWindow;
struct Window *wn;
NewWindow.LeftEdge=x;
NewWindow.TopEdge=y;
NewWindow.Width=w;
NewWindow.Height=h;
NewWindow.DetailPen=0;
NewWindow.BlockPen=1;
NewWindow.Title=name;
NewWindow.Flags=flags;
NewWindow.IDCMPFlags=iflags;
NewWindow.FirstGadget=NULL;
NewWindow.CheckMark=NULL;
NewWindow.Type=WBENCHSCREEN;
NewWindow.Screen=IntuitionBase->ActiveScreen;
NewWindow.BitMap=0L;
NewWindow.MinWidth=NewWindow.MinHeight=10;
NewWindow.MaxWidth=640;
NewWindow.MaxHeight=256;
return(OpenWindow(&NewWindow));
}